/*************************************************************
* Strip Packing Problem
* 
*
* */
#ifndef MULTISTART_H
#define MULTISTART_H

   #include <iostream>
   #include <fstream>
   #include <strstream>
   #include <string>
   #include <list>
   #include "rectangulo.h"
   #include "heuristica.h"

   #define N_BUSQUEDAS_LOCALES 5
   
   using namespace std;

   /** Clase Heurística:
    *    La idea es dejar esta clase como padre y derivar las distintas
    *    heurísticas a partir de esta. Podríamos implementar aquí las
    *    funciones comunes, como las reglas de parada, y en las clases
    *    hija las no comunes, como la actualización de la solución.
    *    
    * */
   class MultiStart : public Heuristica {
      ////protected:
         
         
      public:

         ///**
         //* Constructor por defecto. 
         //* En principio no se usa.
         //* */
         MultiStart();
         
         ~MultiStart();

         /** Constructor
         * @param listado de los rectángulos a empaquetar
         * */
         MultiStart(list<Rectangulo> lista_in);

         ///** 
         //* Generar solución inicial 
         //* Mecanismo de generación de soluciones iniciales
         //* • Soluciones generadas aleatoriamente
         //* • GRASP
         //* • Soluciones distantes de los óptimos locales previamente encontrados
         //* */
         virtual list<Rectangulo> generaInicial();



         ///** 
         //* Modificar la solución 
         //* 
         //* • Búsqueda local
         //* • Estructura de entorno
         //* • Muestreo en el entorno
         //* */
         virtual list<Rectangulo> mejoraSolucion();


   };

#endif
